@@ -55,6 +55,8 @@ class Agent < ActiveRecord::Base |
||
| 55 | 55 |
has_many :scenario_memberships, :dependent => :destroy, :inverse_of => :agent |
| 56 | 56 |
has_many :scenarios, :through => :scenario_memberships, :inverse_of => :agents |
| 57 | 57 |
|
| 58 |
+ scope :active, -> { where(disabled: false) }
|
|
| 59 |
+ |
|
| 58 | 60 |
scope :of_type, lambda { |type|
|
| 59 | 61 |
type = case type |
| 60 | 62 |
when String, Symbol, Class |
@@ -11,7 +11,6 @@ class TwitterStream |
||
| 11 | 11 |
|
| 12 | 12 |
def stop |
| 13 | 13 |
@running = false |
| 14 |
- EventMachine::stop_event_loop if EventMachine.reactor_running? |
|
| 15 | 14 |
end |
| 16 | 15 |
|
| 17 | 16 |
def stream!(filters, agent, &block) |
@@ -91,9 +90,13 @@ class TwitterStream |
||
| 91 | 90 |
def run |
| 92 | 91 |
while @running |
| 93 | 92 |
begin |
| 94 |
- agents = Agents::TwitterStreamAgent.all |
|
| 93 |
+ agents = Agents::TwitterStreamAgent.active.all |
|
| 95 | 94 |
|
| 96 | 95 |
EventMachine::run do |
| 96 |
+ EventMachine.add_periodic_timer(1) {
|
|
| 97 |
+ EventMachine::stop_event_loop if !@running |
|
| 98 |
+ } |
|
| 99 |
+ |
|
| 97 | 100 |
EventMachine.add_periodic_timer(RELOAD_TIMEOUT) {
|
| 98 | 101 |
puts "Reloading EventMachine and all Agents..." |
| 99 | 102 |
EventMachine::stop_event_loop |
@@ -101,17 +104,14 @@ class TwitterStream |
||
| 101 | 104 |
|
| 102 | 105 |
if agents.length == 0 |
| 103 | 106 |
puts "No agents found. Will look again in a minute." |
| 104 |
- sleep 60 |
|
| 105 |
- EventMachine::stop_event_loop |
|
| 107 |
+ EventMachine.add_timer(60) {
|
|
| 108 |
+ EventMachine::stop_event_loop |
|
| 109 |
+ } |
|
| 106 | 110 |
else |
| 107 | 111 |
puts "Found #{agents.length} agent(s). Loading them now..."
|
| 108 | 112 |
load_and_run agents |
| 109 | 113 |
end |
| 110 | 114 |
end |
| 111 |
- |
|
| 112 |
- print "Pausing..."; STDOUT.flush |
|
| 113 |
- sleep 1 |
|
| 114 |
- puts "done." |
|
| 115 | 115 |
rescue SignalException, SystemExit |
| 116 | 116 |
@running = false |
| 117 | 117 |
EventMachine::stop_event_loop if EventMachine.reactor_running? |